﻿Imports Entidad
Imports Negocio
Imports Utilitario

Public Class frmAsignaPickeador

    '-------------------------------------------------Instancias a capa de Negocio -----------------------------------------------------
    Dim servicio1 As New DocumentoClienteNegocio
    Dim servicio2 As New DocumentoClienteDetalleNegocio
    Dim servicio3 As New PickeadorNegocio
    Dim servicio4 As New DocumentoAlmacenDetallePickeadorNegocio
    Dim servicio5 As New DocumentoAlmacenPickeadorNegocio
    Dim servicio6 As New DocumentoAlmacenPickeadorTiempoNegocio
    Dim servicio7 As New AlertaDocumentoAlmacenPickeadorNegocio
    Dim servicio8 As New AuditoriaNegocio
    Dim servicio9 As New MensajeNegocio
    Dim servicio10 As New AlertaDocumentoClienteNegocio
    Dim servicio11 As New DocumentoAlmacenNegocio
    Dim servicio12 As New DocumentoAlmacenDetalleNegocio
    Dim servicio13 As New DocumentoClienteAlmacenDetalleNegocio

    '---------------------------------------------------  Variables para la asignacion ----------------------------------------------------------------
    Dim codigoPedido As String = ""
    Dim codigoPickeador As String = ""
    Dim codigoCliente As String = ""
    Dim fechaAsignacion1 As String = ""
    Dim fechaAsignacion2 As String = ""

    '-------------------------------------------------- Variables para la eliminacion -----------------------------------------------------------------
    Dim dcaCodigo As String = ""
    Dim codPed As String = ""
    Dim codPick As String = ""

    '------------------------------------------------- Variable para el aumento -----------------------------------------------------------------------
    Dim pdp As PedidoDetallePickeador = Nothing

    '------------------------------------------ Variables de Logueo ------------------------------------------------------------------------
    Dim cia As String = "01"
    Dim suc As String = "01"
    Dim alm As String = "00"

    Dim CONS_EstAsignacion As String = "15"
    Dim CONS_EstIngresado As String = "02"
    Dim CON_EstAnulado As String = "17"

    Dim tipoDOC As String = "P"
    Dim tipoDOCPick As String = "PK"

    '---------------------------------------------- Contadores -----------------------------------------------------------------------------
    Dim numero1 As Integer = 0
    Dim numero2 As Integer = 0
    Dim numero3 As Integer = 0
    Dim numero4 As Integer = 0
    Dim contador As Integer = Nothing
    Dim con As Integer = 0
    Dim nombrePickador As String

    ' ----------------------------------------- Index de filas seleccionadas -------------------------------------------------------------
    Dim filaped As Integer = -1
    Dim filaPick As Integer = -1

    '------------------------------------------------ Metodos ------------------------------------------------------------------------------------------

    Sub mensaje(ByVal men As String)
        MsgBox(men, MsgBoxStyle.Information, "Mensajes al Usuario")
    End Sub

    Sub listarPedidos()
        Dim ds As DataSet = servicio1.listarPedidos(tipoDOC)
        gvPedido.DataSource = ds.Tables(0)
        If ds.Tables(0).Rows.Count > 0 Then
            gvPedido.Rows(0).Selected = False
        End If
    End Sub

    Sub listarDetalle(ByVal codPedido As String)
        Dim ds As DataSet = servicio2.listarDetallePendienteAsignar(cia, suc, tipoDOC, codPedido)
        lblCantidad.Text = "Cantidad de Registros : " & ds.Tables(0).Rows.Count
        gvDetalle.DataSource = ds.Tables(0)
        If ds.Tables(0).Rows.Count > 0 Then
            gvDetalle.Rows(0).Cells(0).Selected = False
        End If
    End Sub

    Sub listarPickeadores()
        Dim ds As DataSet = servicio3.listarPickeadores()
        gvPickeador.DataSource = ds.Tables(0)
        If ds.Tables(0).Rows.Count > 0 Then
            gvPickeador.Rows(0).Cells(1).Selected = False
        End If
    End Sub

    Sub listarDetallesPedidosPickeador()
        Dim ds As DataSet = servicio4.listarDocumentoAlmacenDetallePickeador()
        gvPedidoPickeadorDetalle.DataSource = ds.Tables(0)
        If ds.Tables(0).Rows.Count > 0 Then
            gvPedidoPickeadorDetalle.Rows(0).Selected = False
        End If
    End Sub

    'Function contarArticulosWithStock() As Integer
    '    Dim numeracion As Integer = 0
    '    Dim acumulacion As Integer = 0
    '    For Each fila As DataGridViewRow In gvDetalle.Rows
    '        If Convert.ToBoolean(fila.Cells(0).Value = True) Then
    '            Dim combo As DataSet = servicio12.obtenerArtículosEnsamblado(fila.Cells("clmCodArt").Value)
    '            If combo.Tables(0).Rows.Count = 0 Then
    '                Dim ubicaciones As DataSet = servicio12.obtenerUbicaciones(fila.Cells("clmCodArt").Value)
    '                For i = 0 To ubicaciones.Tables(0).Rows.Count - 1
    '                    If CInt(ubicaciones.Tables(0).Rows(i)("Stock").ToString.Trim) >= CInt(fila.Cells("clmCantidadPick").Value) Then
    '                        acumulacion = acumulacion + CInt(ubicaciones.Tables(0).Rows(i)("Stock").ToString.Trim)
    '                    End If
    '                Next
    '                If acumulacion < CInt(fila.Cells("clmCantidadPick").Value) Then
    '                    numeracion = numeracion + 1
    '                End If
    '            Else
    '                For c = 0 To combo.Tables(0).Rows.Count - 1
    '                    Dim ubicaciones As DataSet = servicio12.obtenerUbicaciones(combo.Tables(0).Rows(c)("ART_Codigo_Combo").ToString.Trim)
    '                    For i = 0 To ubicaciones.Tables(0).Rows.Count - 1
    '                        If CInt(ubicaciones.Tables(0).Rows(i)("Stock").ToString.Trim) < (CInt(fila.Cells("clmCantidadPick").Value) * CInt(combo.Tables(0).Rows(c)("ARE_Cantidad").ToString.Trim)) Then
    '                            acumulacion = acumulacion + CInt(ubicaciones.Tables(0).Rows(i)("Stock").ToString.Trim)
    '                        Else
    '                            Exit For
    '                        End If
    '                    Next
    '                    If acumulacion = 0 Then
    '                        numeracion = 0
    '                    ElseIf acumulacion < (CInt(fila.Cells("clmCantidadPick").Value) * CInt(combo.Tables(0).Rows(c)("ARE_Cantidad").ToString.Trim)) Then
    '                        numeracion = numeracion + 1
    '                    End If
    '                Next
    '            End If
    '        End If
    '    Next

    '    Return numeracion
    'End Function

    Function contarArticulosWithStock() As Boolean
        Dim contador As Integer = 0
        'Recorro toda las filas donde el chek box esta activada

        For Each fila As DataGridViewRow In gvDetalle.Rows
            If fila.Cells(0).Value = "1" Then
                'primero pregunto si el articulo es un ensamblado (traerme todos los articulos que comprende)
                Dim combo As DataSet = servicio12.obtenerArtículosEnsamblado(fila.Cells("clmCodArt").Value)
                If combo.Tables(0).Rows.Count > 0 Then
                    'si es un ensamblado
                    'recorremos todos los articulos del ensamblado
                    For i = 0 To combo.Tables(0).Rows.Count - 1
                        'como ya es articulo, lo que hacemos es traer todas sus ubicaciones y acumularlas
                        Dim acumulador As Integer = 0
                        Dim ubicaciones As DataSet = servicio12.obtenerUbicaciones(combo.Tables(0).Rows(i)("ART_Codigo_Combo").ToString.Trim)
                        'preguntamos si trajo ubicaciones, si no el contador se incrementa
                        If ubicaciones.Tables(0).Rows.Count > 0 Then
                            For u = 0 To ubicaciones.Tables(0).Rows.Count - 1
                                acumulador = acumulador + CInt(ubicaciones.Tables(0).Rows(u)("stock").ToString.Trim)
                            Next
                            'una vez acumulado, comparo las cantidades
                            'si el acumulado es menor que la cantidad pedida el contador se incrementa
                            Dim nuevaCantidad As Integer = CInt(fila.Cells("clmCantidadPick").Value) * CInt(combo.Tables(0).Rows(i)("ARE_Cantidad").ToString.Trim)
                            If acumulador < nuevaCantidad Then
                                contador = contador + 1
                            End If
                        Else
                            contador = contador + 1
                        End If
                    Next
                Else
                    'no es un ensamblado, lo que se hace es traer todas sus ubicaciones del articulo y acumularlas
                    Dim acumulador As Integer = 0
                    Dim ubicaciones As DataSet = servicio12.obtenerUbicaciones(fila.Cells("clmCodArt").Value)
                    'preguntamos si trajo ubicaciones, si no el contador se incrementa
                    If ubicaciones.Tables(0).Rows.Count > 0 Then
                        For i = 0 To ubicaciones.Tables(0).Rows.Count - 1
                            acumulador = acumulador + CInt(ubicaciones.Tables(0).Rows(i)("stock").ToString.Trim)
                        Next
                        'una vez acumulador , comparo las cantidades
                        'si la acumulada es menor que la cantidad pedida el contador se incrementa
                        If acumulador < CInt(fila.Cells("clmCantidadPick").Value) Then
                            contador = contador + 1
                        End If
                    Else
                        contador = contador + 1
                    End If
                End If
            End If
        Next
        Return contador
    End Function

    Sub asignar()
        gvDetalle.EndEdit()
        If numero1 = 0 Then
            mensaje("No ha seleccionado ningún pedido.")
            numero3 = 0
        Else
            For Each fila As DataGridViewRow In gvDetalle.Rows
                If Convert.ToBoolean(fila.Cells(0).Value = True) Then
                    numero2 = numero2 + 1
                End If
            Next
            If numero2 = 0 Then
                mensaje("Seleccione al menos un detalle.")
                eliminarRegistrosGrillaDetalle()
                numero1 = 0
                numero3 = 0
            Else
                If numero3 = 0 Then
                    mensaje("No ha seleccionado ningun pickeador.")
                Else
                    If MsgBox("¿Esta seguro que desea realizar esta asignación?", MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2, "Mensajes al Usuario") = MsgBoxResult.Yes Then
                        If servicio1.verificarPedidoAnuladoSQL(cia, suc, codigoPedido, tipoDOC) = False Then
                            If servicio1.verificarPedidoIngresadoSQL(cia, suc, codigoPedido, tipoDOC) = False Then
                                If contarArticulosWithStock() = 0 Then
                                    'generamos el codigo de Documento Almacen 
                                    Dim dcaCodigo As String = CStr(servicio11.generarCodigoDocumentoAlmacen(tipoDOCPick))

                                    '------------------Registramos en el Documento Almacen-------------------------
                                    Dim da As New DocumentoAlmacen(cia, suc, tipoDOCPick, dcaCodigo, CONS_EstIngresado)
                                    servicio11.registrarDocumentoAlmacen(da)

                                    '-------------------Se ingresa registro en DAP ----------------------------
                                    If servicio5.verificarExistenciaDocumentoAlmacenPickeador(codigoPedido, codigoPickeador, tipoDOCPick) = False Then
                                        Dim dapCodigo As String = servicio5.obtenerCodigoGeneradoDPA(tipoDOCPick).ToString
                                        Dim dap As New DocumentoAlmacenPickeador(cia, suc, alm, tipoDOCPick, dcaCodigo, dapCodigo, codigoPickeador, contador + 1, "1")
                                        servicio5.registrarDocumentoAlmacenPickeador(dap)
                                    End If

                                    '----------------Se realiza validaciones y se registra ---------------------
                                    For Each fila As DataGridViewRow In gvDetalle.Rows
                                        If Convert.ToBoolean(fila.Cells(0).Value = True) Then
                                            If fila.Cells(2).Value = Nothing Then
                                                mensaje("La cantidad a pickear no puede estar vacía.")
                                                Exit For
                                                Exit Sub
                                            ElseIf IsNumeric(fila.Cells(2).Value) = False Then
                                                mensaje("La cantidad a pickear no puede ser letras.")
                                                Exit For
                                                Exit Sub
                                            ElseIf CInt(fila.Cells(2).Value) > CInt(fila.Cells(7).Value) Then
                                                mensaje("La cantidad a pickear no puede ser mayor a la cantidad total.")
                                                Exit For
                                                Exit Sub
                                            ElseIf CInt(fila.Cells(2).Value) <= 0 Then
                                                mensaje("La cantidad a pickear no puede ser menor o igual a 0.")
                                                Exit For
                                                Exit Sub
                                            Else
                                                If servicio4.verificarExistenciaDocumentoAlmacenDetallePickeador(codigoPedido, codigoPickeador, fila.Cells(3).Value, tipoDOC) = True Then
                                                    If MsgBox("El pickeador ya tiene asignado una cantidad para este pedido, ¿Desea aumentar su cantidad a pickear?", MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2, "Mensajes al Usuario") = MsgBoxResult.Yes Then
                                                        servicio4.actualizarCantidadDocumentoAlmacenDetallePickeador(codigoPedido, codigoPickeador, fila.Cells(2).Value, fila.Cells(3).Value, tipoDOC)
                                                    End If
                                                Else

                                                    Dim ens As DataSet = servicio12.obtenerArtículosEnsamblado(fila.Cells(4).Value)
                                                    If ens.Tables(0).Rows.Count <> 0 Then
                                                        For i = 0 To ens.Tables(0).Rows.Count - 1

                                                            Dim dadCodigo As Integer = servicio12.generarCodigoDAD(tipoDOCPick)

                                                            '--------------Registramos el detalle del Documento Almacen ---------------------------------------------------------------------------------------
                                                            Dim dad As New DocumentoAlmacenDetalle(cia, suc, tipoDOCPick, dcaCodigo, dadCodigo, ens.Tables(0).Rows(i)("ART_Codigo_Combo").ToString.Trim, (CInt(fila.Cells(2).Value) * CInt(ens.Tables(0).Rows(i)("ARE_Cantidad").ToString.Trim)))
                                                            servicio12.registrarDocumentoAlmacenDetalle(dad)

                                                            '-------------Registramos la relacion entre almacen y el cliente -----------------------------------------
                                                            Dim dcad As New DocumentoClienteAlmacenDetalle(cia, suc, tipoDOC, codigoPedido, CInt(fila.Cells(3).Value), codigoCliente, cia, suc, tipoDOCPick, dcaCodigo, dadCodigo, alm)
                                                            servicio13.registrarDocumentoClienteAlmacenDetalle(dcad)

                                                            '--------------Registramos en el Documento Almacen Detalle Pickeador -------------------------------------------
                                                            Dim dadpCodigo As String = servicio4.obtenerCodigoGeneradoDADP(tipoDOCPick)
                                                            Dim dadp As New DocumentoAlmacenDetallePickeador(cia, suc, alm, tipoDOCPick, dcaCodigo, dadCodigo, servicio5.obtenerCodigo(dcaCodigo, codigoPickeador, tipoDOCPick), dadpCodigo, codigoPickeador, (CInt(fila.Cells(2).Value) * CInt(ens.Tables(0).Rows(i)("ARE_Cantidad").ToString.Trim)), "1")
                                                            servicio4.registrarDocumentoAlmacenDetallePickeador(dadp)
                                                        Next
                                                    Else
                                                        Dim dadCodigo As Integer = servicio12.generarCodigoDAD(tipoDOCPick)

                                                        '--------------Registramos el detalle del Documento Almacen -----------------------------------
                                                        Dim dad As New DocumentoAlmacenDetalle(cia, suc, tipoDOCPick, dcaCodigo, dadCodigo, fila.Cells(4).Value, CInt(fila.Cells(2).Value))
                                                        servicio12.registrarDocumentoAlmacenDetalle(dad)

                                                        '-------------Registramos la relacion entre almacen y el cliente -----------------------------------------
                                                        Dim dcad As New DocumentoClienteAlmacenDetalle(cia, suc, tipoDOC, codigoPedido, CInt(fila.Cells(3).Value), codigoCliente, cia, suc, tipoDOCPick, dcaCodigo, dadCodigo, alm)
                                                        servicio13.registrarDocumentoClienteAlmacenDetalle(dcad)

                                                        '--------------Registramos en el Documento Almacen Detalle Pickeador -------------------------------------------
                                                        Dim dadpCodigo As String = servicio4.obtenerCodigoGeneradoDADP(tipoDOCPick)
                                                        Dim dadp As New DocumentoAlmacenDetallePickeador(cia, suc, alm, tipoDOCPick, dcaCodigo, dadCodigo, servicio5.obtenerCodigo(dcaCodigo, codigoPickeador, tipoDOCPick), dadpCodigo, codigoPickeador, CInt(fila.Cells(2).Value), "1")
                                                        servicio4.registrarDocumentoAlmacenDetallePickeador(dadp)
                                                    End If
                                                End If
                                            End If
                                        End If
                                    Next

                                    If servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codigoPickeador, servicio5.obtenerCodigo(dcaCodigo, codigoPickeador, tipoDOCPick), tipoDOCPick) = "" Then
                                        Dim dapt1 As New DocumentoAlmacenPickeadorTiempo(servicio5.obtenerCodigo(dcaCodigo, codigoPickeador, tipoDOCPick), cia, suc, alm, tipoDOCPick, dcaCodigo, codigoPickeador, fechaAsignacion1, "07")
                                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(dapt1, "1")
                                        Dim dapt As New DocumentoAlmacenPickeadorTiempo(servicio5.obtenerCodigo(dcaCodigo, codigoPickeador, tipoDOCPick), cia, suc, alm, tipoDOCPick, dcaCodigo, codigoPickeador, Nothing, "01")
                                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(dapt, "0")
                                    ElseIf servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codigoPickeador, servicio5.obtenerCodigo(dcaCodigo, codigoPickeador, tipoDOCPick), tipoDOCPick) = "02" Then
                                        Dim dapt1 As New DocumentoAlmacenPickeadorTiempo(servicio5.obtenerCodigo(dcaCodigo, codigoPickeador, tipoDOCPick), cia, suc, alm, tipoDOCPick, dcaCodigo, Nothing, codigoPickeador, "07")
                                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(dapt1, "0")
                                        Dim dapt As New DocumentoAlmacenPickeadorTiempo(servicio5.obtenerCodigo(dcaCodigo, codigoPickeador, tipoDOCPick), cia, suc, alm, tipoDOCPick, dcaCodigo, Nothing, codigoPickeador, "01")
                                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(dapt, "0")
                                    End If

                                    If servicio2.listarDetallePendienteAsignar(cia, suc, tipoDOC, codigoPedido).Tables(0).Rows.Count = 0 Then
                                        If servicio4.verificarInicioPicking(dcaCodigo, tipoDOCPick) = False Then
                                            servicio8.actualizarUsuarioEstadoPedido(usuarioPersona, CONS_EstAsignacion, cia, suc, tipoDOC, codigoPedido)
                                        End If
                                    End If

                                    filaped = Nothing
                                    filaPick = Nothing
                                    cbTodos.Checked = False
                                    listarPedidos()
                                    listarDetalle(codigoPedido)
                                    listarPickeadores()
                                    listarDetallesPedidosPickeador()
                                    contador = servicio5.ultimoNumero(codigoPickeador)
                                    numero3 = 0
                                Else
                                    mensaje("No se cuenta con suficiente stock para cubrir la cantidad del pedido.")
                                    listarPedidos()
                                    eliminarRegistrosGrillaDetalle()
                                End If
                            Else
                                mensaje("La asignación no se puede completar, el pedido ha sido modificado.")
                                numero1 = 0
                                numero2 = 0
                                numero3 = 0
                                numero4 = 0
                                filaped = Nothing
                                filaPick = Nothing
                                cbTodos.Checked = False
                                lblCantidad.Text = ""
                                gvDetalle.DataSource = Nothing
                                listarPickeadores()
                                listarPedidos()
                            End If
                        Else
                            mensaje("La asignación no se puede completar, el pedido está anulado.")
                            numero1 = 0
                            numero2 = 0
                            numero3 = 0
                            numero4 = 0
                            filaped = Nothing
                            filaPick = Nothing
                            cbTodos.Checked = False
                            lblCantidad.Text = ""
                            gvDetalle.DataSource = Nothing
                            listarPickeadores()
                            listarPedidos()
                        End If
                    Else
                        numero1 = 0
                        numero2 = 0
                        numero3 = 0
                        numero4 = 0
                        filaped = Nothing
                        filaPick = Nothing
                        cbTodos.Checked = False
                    End If
                End If
            End If
        End If
    End Sub

    Sub priorizar()
        If numero4 = 0 Then
            mensaje("Seleccione un registro.")
        Else
            If servicio4.verificarAsignacionPedido(dcaCodigo, codPick, tipoDOCPick) = "0" Then
                servicio5.priorizarPedidoXPickeador(dcaCodigo, codPick)
                mensaje("Se informará al Pickeador que atienda el pedido : " & dcaCodigo & " inmediatamente.")
                servicio7.ingresarAlertaAlmacenPickeador(dcaCodigo, codPick, usuarioPersona, "ATENDER EL PEDIDO : " & dcaCodigo & " INMEDIATAMENTE.", "1", cia, suc, tipoDOCPick, "P")
                servicio4.cambiarAsignacionDocumentoAlmacenPickeador(dcaCodigo, "1", codPick, tipoDOCPick)

                listarPedidos()
                listarPickeadores()
                listarDetallesPedidosPickeador()
            Else
                mensaje("El pedido : " & dcaCodigo & " ya ha sido priorizado.")
            End If
        End If
    End Sub

    Sub quitar()
        If MsgBox("¿Esta seguro que desea eliminar esta asignación?", MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2, "Mensajes al Usuario") = MsgBoxResult.Yes Then
            If numero4 = 0 Then
                mensaje("Seleccione un registro.")
            Else
                If servicio4.verificarInicioPickeo(dcaCodigo, codPick, tipoDOCPick) = True Then
                    If MsgBox("¿Hay articulos que se están pickeando, sólo se eliminará todos los artículos que no se están pickiando, está seguro de realizar este proceso?", MsgBoxStyle.Question + MsgBoxStyle.YesNo + MsgBoxStyle.DefaultButton2, "Mensajes al Usuario") = MsgBoxResult.Yes Then

                        '********************* Cambiamos el estado del Pedido a Aprobado ********************
                        servicio8.actualizarUsuarioEstadoPedido(usuarioPersona, EST_Aprobado, cia, suc, tipoDOC, codigoPedido)

                        '********************* Obtenemos el codigo de la tabla DAP **************************
                        Dim dapCodigo As Integer = servicio6.obtenerCodigo(dcaCodigo, codPick, tipoDOCPick)

                        '******************** Verificamos e ingresamos el evento correspondiente ********************
                        If servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codPick, dapCodigo, tipoDOCPick) = "01" Then
                            Dim dapt As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "02")
                            servicio6.ingresarDocumentoAlmacenPickeadorTiempo(dapt, "0")
                        ElseIf servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codPick, dapCodigo, tipoDOCPick) = "03" Then
                            Dim ppt As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "04")
                            servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppt, "0")
                            Dim ppts As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "06")
                            servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppts, "0")
                            Dim pptss As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "02")
                            servicio6.ingresarDocumentoAlmacenPickeadorTiempo(pptss, "0")
                        ElseIf servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codPick, dapCodigo, tipoDOCPick) = "04" Then
                            Dim ppts As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "06")
                            servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppts, "0")
                            Dim pptss As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "02")
                            servicio6.ingresarDocumentoAlmacenPickeadorTiempo(pptss, "0")
                        ElseIf servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codPick, dapCodigo, tipoDOCPick) = "05" Then
                            Dim ppt As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "06")
                            servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppt, "0")
                            Dim ppts As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "02")
                            servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppts, "0")
                        End If

                        '******************** Cambiamos el flag de asignacion *****************************
                        'servicio4.cambiarAsignacionDocumentoAlmacenPickeador(dcaCodigo, "0", codPick, tipoDOCPick)

                        '****************** Desactivamos los detalles que no han sido pickeados de la tabla DAD y DCAD ***************
                        Dim ds As DataSet = servicio4.obtenerCodigosDetalleNoPickeados(cia, suc, alm, tipoDOCPick, dcaCodigo)
                        '-----------------------------------------------------------------------------------
                        'recorremos los registros obtenidos
                        For i = 0 To ds.Tables(0).Rows.Count - 1
                            'obtenemos el codigo DAD_Codigo
                            Dim dadCodigo As String = ds.Tables(0).Rows(i)("DAD_Codigo").ToString.Trim
                            'desactivamos el registro de DAD
                            servicio12.desactivarRegistrosDAD(cia, suc, tipoDOCPick, dcaCodigo, dadCodigo)
                            'desactivamos el registro de DCAD
                            servicio13.desactivarRelacionDocumentoClienteAlmacenDetalle(cia, suc, alm, tipoDOCPick, dcaCodigo, dadCodigo)
                        Next

                        '***************** Cambiamos el Estado del Documento Almacen **************************
                        Dim cantidadDetalleAsignados As Integer = servicio4.obtenerCantidadDetallesAsignados(cia, suc, alm, tipoDOCPick, dcaCodigo)
                        'si son las cantidades iguales es porque voy a desactivar todo
                        'el estado va a cambiar
                        If cantidadDetalleAsignados = ds.Tables(0).Rows.Count Then
                            servicio11.actualizarEstadoDocumentoAlmacen(cia, suc, tipoDOCPick, dcaCodigo, CON_EstAnulado)
                        End If

                        '**************** Ingresamos la fecha Fin de Asignacion en DAP (Dispara trigger) **********************
                        servicio5.actualizarFechaFinAsignacion(dcaCodigo, codPick, tipoDOCPick)

                        cbTodos.Checked = False
                        listarPedidos()
                        listarDetalle(dcaCodigo)
                        listarPickeadores()
                        listarDetallesPedidosPickeador()
                        numero4 = 0
                    End If
                Else

                    '********************* Cambiamos el estado del Pedido a Aprobado ********************
                    servicio8.actualizarUsuarioEstadoPedido(usuarioPersona, EST_Aprobado, cia, suc, tipoDOC, codigoPedido)

                    '********************* Obtenemos el codigo de la tabla DAP **************************
                    Dim dapCodigo As Integer = servicio6.obtenerCodigo(dcaCodigo, codPick, tipoDOCPick)

                    '******************** Verificamos e ingresamos el evento correspondiente ********************
                    If servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codPick, dapCodigo, tipoDOCPick) = "01" Then
                        Dim ppt As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "02")
                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppt, "0")
                    ElseIf servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codPick, dapCodigo, tipoDOCPick) = "03" Then
                        Dim ppt As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "04")
                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppt, "0")
                        Dim ppts As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "06")
                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppts, "0")
                        Dim pptss As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "02")
                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(pptss, "0")
                    ElseIf servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codPick, dapCodigo, tipoDOCPick) = "04" Then
                        Dim ppts As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "06")
                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppts, "0")
                        Dim pptss As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "02")
                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(pptss, "0")
                    ElseIf servicio6.verificarDocumentoAlmacenPickeadorTiempo(dcaCodigo, codPick, dapCodigo, tipoDOCPick) = "05" Then
                        Dim ppt As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "06")
                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppt, "0")
                        Dim ppts As New DocumentoAlmacenPickeadorTiempo(dapCodigo, cia, suc, alm, tipoDOCPick, dcaCodigo, codPick, Nothing, "02")
                        servicio6.ingresarDocumentoAlmacenPickeadorTiempo(ppts, "0")
                    End If

                    '******************** Cambiamos el flag de asignacion *****************************
                    'servicio4.cambiarAsignacionDocumentoAlmacenPickeador(dcaCodigo, "0", codPick, tipoDOCPick)

                    '****************** Desactivamos los detalles que no han sido pickeados de la tabla DAD y DCAD ***************
                    Dim ds As DataSet = servicio4.obtenerCodigosDetalleNoPickeados(cia, suc, alm, tipoDOCPick, dcaCodigo)
                    '-----------------------------------------------------------------------------------
                    'recorremos los registros obtenidos
                    For i = 0 To ds.Tables(0).Rows.Count - 1
                        'obtenemos el codigo DAD_Codigo
                        Dim dadCodigo As String = ds.Tables(0).Rows(i)("DAD_Codigo").ToString.Trim
                        'desactivamos el registro de DAD
                        servicio12.desactivarRegistrosDAD(cia, suc, tipoDOCPick, dcaCodigo, dadCodigo)
                        'desactivamos el registro de DCAD
                        servicio13.desactivarRelacionDocumentoClienteAlmacenDetalle(cia, suc, alm, tipoDOCPick, dcaCodigo, dadCodigo)
                    Next

                    '***************** Cambiamos el Estado del Documento Almacen **************************
                    servicio11.actualizarEstadoDocumentoAlmacen(cia, suc, tipoDOCPick, dcaCodigo, CON_EstAnulado)

                    '**************** Ingresamos la fecha Fin de Asignacion en DAP (Dispara trigger) **********************
                    servicio5.actualizarFechaFinAsignacion(dcaCodigo, codPick, tipoDOCPick)

                    cbTodos.Checked = False
                    listarPedidos()
                    listarDetalle(dcaCodigo)
                    listarPickeadores()
                    listarDetallesPedidosPickeador()
                    numero4 = 0
                End If
            End If
        End If
    End Sub

    Sub enviarMensaje()
        If numero3 = 0 Then
            mensaje("No ha seleccionado ningun pickeador.")
        Else
            Dim mens As String = InputBox("Mensaje para el pickeador : " & nombrePickador, "Mensaje informativo")
            If mens <> "" Then
                Dim men As New Mensaje(cia, suc, usuarioPersona, codigoPickeador, mens)
                If servicio9.verificarExistencia(men) = True Then
                    servicio9.actualizarMensaje(men)
                Else
                    servicio9.registrarMensaje(men)
                End If
                mensaje("El mensaje se envió correctamente.")
            End If
        End If
    End Sub

    Sub inicializar()
        lblFecha.Text = "Fecha Actual : " & CStr(Date.Now).ToUpper
        fechaAsignacion1 = Date.Now.ToString("dd/MM/yyyy HH:mm:ss")
        lblAsignador.Text = usuariDatos
    End Sub

    Sub eliminarRegistrosGrillaDetalle()
        If gvDetalle.RowCount >= 1 Then
            For i As Integer = 0 To gvDetalle.RowCount - 1
                gvDetalle.Rows.Remove(gvDetalle.CurrentRow)
            Next
        End If
        cbTodos.Checked = False
        lblCantidad.Text = ""
    End Sub

    '------------------------------------------ Eventos -----------------------------------------------------------------------------------------------------------

    Private Sub gvPedidoPickeadorDetalle_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvPedidoPickeadorDetalle.Click
        If gvPedidoPickeadorDetalle.RowCount <> 0 Then
            numero4 = 1
            Dim f As Integer = gvPedidoPickeadorDetalle.CurrentRow.Index
            dcaCodigo = gvPedidoPickeadorDetalle.Rows(f).Cells(3).Value
            codPick = gvPedidoPickeadorDetalle.Rows(f).Cells(4).Value
            codPed = gvPedidoPickeadorDetalle.Rows(f).Cells(6).Value
        Else
            mensaje("No hay registros asignados.")
        End If
    End Sub

    Private Sub gvPedido_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvPedido.Click
        If gvPedido.RowCount <> 0 Then
            numero1 = 1
            filaped = gvPedido.CurrentRow.Index
            codigoPedido = gvPedido.Rows(filaped).Cells(2).Value
            codigoCliente = gvPedido.Rows(filaped).Cells(1).Value
            fechaAsignacion2 = Date.Now.ToString("dd/MM/yyyy HH:mm:ss")
            listarDetalle(codigoPedido)
        Else
            mensaje("No hay pedidos por asignar.")
        End If
    End Sub

    Private Sub gvDetalle_CellContentClick(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles gvDetalle.CellContentClick
        If gvDetalle.RowCount <> 0 Then
            gvDetalle.EndEdit()

            'For Each fila As DataGridViewRow In gvDetalle.Rows
            Dim f As Integer = e.RowIndex
            If f > -1 Then
                If Convert.ToBoolean(gvDetalle.Rows(f).Cells(0).Value = True) Then
                    gvDetalle.Rows(f).Cells(2).ReadOnly = False
                    gvDetalle.Rows(f).Cells(2).Value = gvDetalle.Rows(f).Cells(7).Value
                Else
                    gvDetalle.Rows(f).Cells(2).ReadOnly = True
                    gvDetalle.Rows(f).Cells(2).Value = ""
                End If
            End If
            'Next
        Else
            mensaje("No hay detalle por pickear.")
        End If
    End Sub

    Private Sub frmAsignaPickeador_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        inicializar()
        listarPedidos()
        listarPickeadores()
        listarDetallesPedidosPickeador()
    End Sub

    Private Sub btnAsignar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAsignar.Click
        asignar()
        listarPedidos()
        listarDetallesPedidosPickeador()
        listarPickeadores()
    End Sub

    Private Sub btnQuitar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnQuitar.Click
        quitar()
    End Sub

    Private Sub btnPriorizar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPriorizar.Click
        priorizar()
    End Sub

    Private Sub gvPickeador_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvPickeador.Click
        If gvPickeador.RowCount <> 0 Then
            numero3 = 1
            filaPick = gvPickeador.CurrentRow.Index
            codigoPickeador = gvPickeador.Rows(filaPick).Cells("clmCodigo").Value
            nombrePickador = gvPickeador.Rows(filaPick).Cells("clmNombre").Value
            contador = servicio5.ultimoNumero(codigoPickeador)
        Else
            mensaje("No hay pickeadores disponibles.")
        End If
    End Sub

    Private Sub cbTodos_CheckedChanged(sender As System.Object, e As System.EventArgs) Handles cbTodos.CheckedChanged
        If cbTodos.Checked = True Then
            For Each fila As DataGridViewRow In gvDetalle.Rows
                fila.Cells(0).Value = True
                gvDetalle.EndEdit()
                If Convert.ToBoolean(fila.Cells(0).Value = True) Then
                    fila.Cells(2).ReadOnly = False
                    fila.Cells(2).Value = fila.Cells(7).Value
                End If
            Next
        Else
            For Each fila As DataGridViewRow In gvDetalle.Rows
                fila.Cells(0).Value = False
                gvDetalle.EndEdit()
                If Convert.ToBoolean(fila.Cells(0).Value = False) Then
                    fila.Cells(2).ReadOnly = True
                    fila.Cells(2).Value = ""
                End If
            Next
        End If
    End Sub

    Private Sub btnMensaje_Click(sender As System.Object, e As System.EventArgs) Handles btnMensaje.Click
        enviarMensaje()
    End Sub

    Private Sub myTm_Tick(sender As System.Object, e As System.EventArgs) Handles myTm.Tick
        lblFecha.Text = "Fecha Actual : " & CStr(Date.Now).ToUpper
    End Sub

    Private Sub btnTerSes_Click(sender As System.Object, e As System.EventArgs) Handles btnTerSes.Click
        frmMenu.veces = 0
        Me.Close()
    End Sub

    Private Sub frmAsignaPickeador_FormClosing(ByVal sender As Object, ByVal e As FormClosingEventArgs) Handles Me.FormClosing
        frmMenu.veces = 0
    End Sub

    Private Sub btnRefrescar_Click(sender As System.Object, e As System.EventArgs) Handles btnRefrescar.Click
        fechaAsignacion1 = Date.Now.ToString("dd/MM/yyyy HH:mm:ss")
        listarPedidos()
        listarPickeadores()
        listarDetallesPedidosPickeador()
    End Sub

End Class